	org 7e00h 		; 告诉编译器程序加载到7e00H处
    mov ax, cs 		; 通过AX中转, 将CS的值传送给DS和ES
    mov ds, ax
    mov es, ax
    call DispStrOne
    call DispStrTwo
    call DispStrThree
    call Keyin
    jmp $

DispStrOne:
    mov ah,13h 	; 功能号
    mov al,1 		; 光标放到串尾
    mov bl,0ah 	; 亮绿
    mov bh,0 		; 第0页
    mov dh,0ah 	; 第10行
    mov dl,23h 	; 第35列
    mov bp,str1 	; BP=串地址
    mov cx,sOneLen 		; 串长为9个字符
    int 10h 		; 调用10H号中断
    ret
; 显示字符串2 "(C) 2017  Chen Xiaofeng"
DispStrTwo:
    mov ah,13h 	; 功能号
    mov al,1 		; 光标放到串尾
    mov bl,0dh 	; 黑底品红字
    mov bh,0 		; 第0页
    mov dh,0ch 	; 第12行
    mov dl,1eh 	; 第30列
    mov bp,str2 	; BP=串地址
    mov cx,sTwoLen 		; 串长为19个字符
    int 10h 		; 调用10H号中断
    ret
; 显示字符串3 "Please Key in characters (Esc to quit):"
; 及响铃、换行、回车
DispStrThree:
    mov ah, 13h 	; 功能号
    mov al, 1 		; 光标放到串尾
    mov bl, 0fh 	; 黑底白字
    mov bh, 0 		; 第0页
    mov dh, 0fh 	; 第15行
    mov dl, 0 		; 第0列
    mov bp, str3 	; BP=串地址
    mov cx, sThreeLen 		; 串长为44个字符（串 + 响铃 换行 回车）
    int 10h 		; 调用10H号中断
    ret

Keyin: ; 读按键
    mov ah, 0 		; 功能号
    int 16h 		; 调用16H号中断
; 对ESC键：退出
    cmp al, 1bh 	; 比较AL中的键入字符与ESC字符（ASCII码为1BH）
    je goout		; 相等跳转到“退出”标号处
showch: ; 显示键入字符
    mov ah, 0eh 	; 功能号
    mov bl, 0 		; 对文本方式置0
    int 10h 		; 调用10H号中断
; 对回车符（0DH）增加一个换行符（0AH）的显示
    cmp al, 0dh 	; 比较AL中的键入字符与回车符（ASCII码为0DH）
    mov al, 0ah 	; 设置AL为换行符（ASCII码为0AH）
    je showch 		; 相等跳转到前面的“显示键入字符”标号处
; 循环读显按键
    jmp Keyin 		; 跳转到前面的“读按键”标号处
goout: ; 退出
    ret 			; 从过程返回

str1: ; 字符串1
    db "MY-OS 1.0"
    sOneLen equ $ - str1
str2: ; 字符串2
    db "(C) 2017  Chen Xiaofeng"
    sTwoLen equ $ - str2
str3: ; 字符串3
    db "Please Key in characters (Esc to quit):"
    db 7, 7, 0ah, 0ah, 0dh ; 响铃 换行 回车
    sThreeLen equ $ - str3

; 用0填充启动扇区的剩余部分
    ; times 510-($-$$) db 0 ; $=当前地址、$$=当前节地址
; 写入启动扇区的结束标志
    ; db 55h,0aah